package com.answer.model.enums;

import lombok.Getter;
import org.apache.commons.lang3.ObjectUtils;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 用户角色枚举
 */
@Getter
public enum UserRoleEnum {

    USER("用户", "user"),
    ADMIN("管理员", "admin"),
    BAN("被封号", "ban");

    private final String text;

    private final String value;

    UserRoleEnum(String text, String value) {
        this.text = text;
        this.value = value;
    }

    /**
     * 获取值列表
     * 此方法通过将枚举中所有实例的值提取到一个列表中，来提供一个获取所有可能值的简便方法
     * 它使用Java 8的流(Stream)来实现这一点，通过映射(map)每个枚举实例到它的值，然后收集(collect)结果到一个新的列表中
     *
     * @return 包含所有枚举实例值的列表
     */
    public static List<String> getValues() {
        return Arrays.stream(values()).map(item -> item.value).collect(Collectors.toList());
    }


    /**
     * 根据 value 获取枚举
     * 此方法旨在通过提供的字符串值，检索并返回匹配的UserRoleEnum枚举对象如果提供的值为空或没有匹配的枚举，则返回null
     * 这种设计允许调用者根据字符串值反向查找枚举，这对于处理来自外部源（如数据库或用户输入）的角色信息特别有用
     *
     * @param value 字符串，表示枚举的值
     * @return 与提供的值匹配的UserRoleEnum枚举，如果没有匹配或值为空，则返回null
     */
    public static UserRoleEnum getEnumByValue(String value) {
        // 检查提供的值是否为空，如果为空，则直接返回null
        if (ObjectUtils.isEmpty(value)) {
            return null;
        }
        // 遍历UserRoleEnum的所有枚举值
        for (UserRoleEnum anEnum : UserRoleEnum.values()) {
            // 如果找到匹配的值，则返回对应的枚举
            if (anEnum.value.equals(value)) {
                return anEnum;
            }
        }
        // 如果没有找到匹配的值，则返回null
        return null;
    }


}
